package vip.zhenzicheng.nettybasic.splicing.delimiter;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author zhenzicheng
 * @date 2022-06-24 09:18
 */
public class DelimiterClientHandler extends SimpleChannelInboundHandler<ByteBuf> {

  private final AtomicInteger counter = new AtomicInteger(0);

  /*** 客户端读取到网络数据后的处理*/
  protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
    System.out.println("client Accept[" + msg.toString(CharsetUtil.UTF_8)
        + "] and the counter is:" + counter.incrementAndGet());
  }

  /*** 客户端被通知channel活跃后，做事*/
  @Override
  public void channelActive(ChannelHandlerContext ctx) throws Exception {
    ByteBuf msg = null;
    String request = "Mark,zhuge,zhouyu,fox,loulan"
        + DelimiterEchoServer.DELIMITER_SYMBOL;
    for (int i = 0; i < 10; i++) {
      msg = Unpooled.buffer(request.length());
      msg.writeBytes(request.getBytes());
      ctx.writeAndFlush(msg);
      System.out.println("发送数据到服务器");
    }
  }

  /*** 发生异常后的处理*/
  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    cause.printStackTrace();
    ctx.close();
  }
}
